import 'dart:io';

import 'package:flutter/material.dart';

import '../../common/system_config.dart';
import '../../utils/tools/localstorage_tool.dart';
import '../../utils/tools/screenutil_tool.dart';
import '../../utils/widget/concreteicon_widget.dart';
import '../../utils/widget/toast_widget.dart';
import '../../viewmodel/base_vm.dart';
import 'components/container_widget.dart';
import 'components/textfield_widget.dart';
import 'methods/check_update.dart';
import 'methods/remember_password.dart';

class LoginView extends StatefulWidget {
  @override
  LoginViewState createState() => new LoginViewState();
}

class LoginViewState extends State<LoginView> {
  // 登录信息
  String LoginInfo;

  // 描述当前是否为加载状态
  bool isLoading = false;

  // 是否记住密码
  bool check = true;

  // app是否需要更新
  bool update = false;

  // 是否需要根据的检查结果
  Map checkUpdateResult;

  // 平台条件（android：true/ios：false）
  bool platformInfo = Platform.isAndroid;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: GestureDetector(
        behavior: HitTestBehavior.translucent,
        onTap: () => FocusScope.of(context).requestFocus(FocusNode()),
        child: Container(
          width: double.infinity,
          height: double.infinity,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Container(
                margin: EdgeInsets.only(bottom: ST.seth(140)),
                child: Column(
                  children: [
                    Container(
                        width: ST.setw(320),
                        margin: EdgeInsets.only(bottom: ST.seth(10)),
                        child:
                            Image(image: AssetImage('assets/images/logo.png'))),
                    Text('配电台区智能监控系统',
                        style: TextStyle(
                            letterSpacing: 5, fontSize: ST.setsp(34))),
                  ],
                ),
              ),
              ContainerWidget(
                  TextFieldWidget.build(context, platformInfo, LoginInfo)),
              ContainerWidget(InkWell(
                onTap: () => setState(() {
                  check = !check;
                }),
                child: Row(
                  mainAxisAlignment: MainAxisAlignment.end,
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: [
                    Checkbox(
                      activeColor: SystemConfig.themeColor,
                      value: check,
                      onChanged: (bool value) {
                        setState(() {
                          check = value;
                        });
                      },
                    ),
                    Text('记住密码')
                  ],
                ),
              )),
              ContainerWidget(Container(
                width: double.infinity,
                height: ST.seth(80),
                child: !isLoading
                    ? MaterialButton(
                        onPressed: update
                            ? () => initPage(context)
                            : () => login(context),
                        color: Theme.of(context).primaryColor,
                        child: Text("${update ? '立 即 更 新' : '登 入'}",
                            style: TextStyle(color: Colors.white)),
                      )
                    : Container(
                        color: SystemConfig.grayColor,
                        height: ST.seth(80),
                        child: Row(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: [
                            CW.circle(),
                            SizedBox(width: ST.setw(20)),
                            Text("正在登录...",
                                style: TextStyle(color: Colors.white))
                          ],
                        ),
                      ),
              ))
            ],
          ),
        ),
      ),
    );
  }

  /// 初始化页面
  /// * [context] 必填|上下文
  void initPage(BuildContext context) async {
    // 1、判断是否已有检查结果
    if (checkUpdateResult == null) {
      // 1.1、不存在检查结果，则发起请求获取检查结果
      checkUpdateResult = await checkisUpdate(context, platformInfo);
    }

    // 2、根据结果分析是否存在更新操作
    if (checkUpdateResult["isUpdate"]) {
      // 2.1、执行回调函数
      checkUpdateResult["callback"]();
    }

    // 3、同步页面显示
//    setState(() {
//      update = checkUpdateResult["isUpdate"];
//    });
  }

  /// 登录
  /// * [context] 必填|上下文
  void login(BuildContext context) async {
    Map result = TextFieldWidget.verificaLoginInfo();

    // 根据结果分类处理
    if (!result["state"]) {
      //便捷操作，实际请剔除
      ToastWidget.toast(result["msg"]);
    } else {
      // 更新界面
      setState(() {
        isLoading = true;
      });

      // 发起请求
      // 13975156637
      // hnwxy01
      String res = await BaseVM.loginDeed(context, result["data"]);

      // 登录成功操作
      if (res != null) {
        // 记住、销毁登录信息
        await isRememberPassword(check, result["data"]);

        // 跳转页面
        Navigator.pushNamedAndRemoveUntil(
            context, '/selectionareaview', (_) => false);
      }

      // 完成通知
      setState(() {
        isLoading = false;
      });
    }
  }

  /// 获取登录信息
  void getLoginInfo() async {
    LoginInfo = await LocalStorage.getStringItem("loginInfo");
  }

  @override
  void initState() {
    super.initState();
    getLoginInfo();
    WidgetsBinding.instance
        .addPostFrameCallback((callback) => initPage(context));
  }
}
